package light;

import javax.vecmath.Point3d;
import javax.vecmath.Vector3d;



public class DirectionLight extends Light {

	Vector3d dir;

	public DirectionLight(Vector3d dir) {
		this.dir = dir;
		this.maxDistance = Float.POSITIVE_INFINITY;
	}
	
	public DirectionLight(double x, double y, double z) {
		this.dir = new Vector3d(x,y,z);
		this.maxDistance = Float.POSITIVE_INFINITY;
	}
	
	public DirectionLight(Vector3d dir, float[] color, float iD, float iS) {
		this.dir = dir;
		this.maxDistance = Float.POSITIVE_INFINITY;
		this.color = color;
		this.iD = iD;
		this.iS = iS;
	}

	// Devuelve un vector con la direccion de la luz direccional
	// Dicha direccion es cte para cualquier punto p
	public Vector3d getLightDir(Point3d p) {
		Vector3d lightDir = new Vector3d(dir);
		lightDir.negate();
		return lightDir;
	}
	
	// Devuelve la distancia desde la luz al punto p
	// La luz direccional se encuentra muy lejos (en el infinito)
	public double getdistanceToLight(Point3d p) {
		return this.maxDistance;
	}
	
	// Calcula la iluminacion de un punto respecto a la posicion de la luz direccional
	// Para una luz direccional la iluminacion es cte en cualquier punto p
	public double falloff(Point3d p) {
		return 1;
	}

	@Override
	public String toString() {
		StringBuffer str = new StringBuffer("");		
		str.append("Light color = ( ");
		for( int i=0 ; i< color.length ; i++ )
			str.append(color[i]+" ");
		str.append(")\n");
		
		str.append("Dir="+dir+"\n");
		str.append("iS="+iS+"\n");
		str.append("iD="+iD);
		str.append(")\n");
		return str.toString();
	}

}
